<?
    /**
     * PrincipioLab
     *
     * @package    PrincipioLab
     */

    /**
     * PrincipioLab_ListElement
     *
     * @package    PrincipioLab
     */
    class PrincipioLab_ListElement implements PrincipioLab_IDAble
    {
        /** @var PrincipioLab_IDAble */
        private $value;

        /** @var null|PrincipioLab_ListElement */
        private $next;


        public function __construct(PrincipioLab_IDAble $value)
        {
            $this->value = $value;
            $this->next = null;
        }


        /**
         * @return mixed
         */
        public function _getID() { return $this->value->_getID(); }


        /**
         * @return null|PrincipioLab_ListElement
         */
        public function getNext() { return $this->next; }


        /**
         * @return PrincipioLab_IDAble
         */
        public function getValue() { return $this->value; }


        /**
         * @return bool
         */
        public function isLast() { return is_null($this->getNext()); }


        /**
         * @param PrincipioLab_ListElement $list_elem
         *
         * @return PrincipioLab_ListElement
         */
        public function setNext(PrincipioLab_ListElement $list_elem)
        {
            $this->next = $list_elem;
            return $this;
        }


        /**
         * @param PrincipioLab_IDAble $element
         *
         * @return PrincipioLab_ListElement
         */
        public static function make(PrincipioLab_IDAble $element)
        {
            return new PrincipioLab_ListElement($element);
        }
    }
?>